home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 July: Mac OS SDK / Dev.CD Jul 96 SDK / Dev.CD Jul 96 SDK2.toast / Development Kits (Disc 2) / QuickDraw GX / Programming Stuff / Sample Code / Typography Samples / Dave’s Fab Samples ƒ / GetGlyphOffsets Example.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-10  |  3.7 KB  |  126 lines  |  [TEXT/KAHL]

  1. /* 1.0D2 -- change transfer modes from gxXorMode to gxFastXorMode
  2.             and change SetShapeCommonTransfer to SetShapeFastTransfer 
  3.             
  4.    1.0B3 -- change GXGetGlyphOffsets to GXGetGlyphOffset */
  5.  
  6. #include <Types.h>
  7. #include <QuickDraw.h>
  8. #include <Fonts.h>
  9. #include <Windows.h>
  10. #include <Menus.h>
  11. #include <SegLoad.h>
  12. #include <Memory.h>
  13. #include <Desk.h>
  14.  
  15. #include "graphics routines.h"
  16. #include "graphics libraries.h"
  17. #include "graphics toolbox.h"
  18.  
  19. #include "layout types.h"
  20. #define gxDefine_true_false_boolean
  21.  
  22. #include "layout routines.h"
  23. #include "layout library.h"
  24. #include "layout feature constants.h"
  25.  
  26. #include "SampleInterface.h"
  27.  
  28. short MyStrLen(char *x);
  29. static short MyStrLen(x)
  30. char    *x;
  31.     {
  32.     short c = 0;
  33.     while (*x++) c++;
  34.     return c;
  35.     }    /* MyStrLen */
  36.  
  37. void GetGlyphOffsetsExample(WindowPtr sampleWindow)
  38.     {
  39.     /* Variables */
  40.     Boolean            leadingEdge, wasRealCharacter;
  41.     char            *myString = "fish-flavored stenographer";
  42.     gxByteOffset        offset;
  43.     gxPoint            myPoint;
  44.     gxRunFeature        gxRunFeature[5];
  45.     gxShape            highlight, layout;
  46.     short            len, level = 0;
  47.     gxStyle            myStyle;
  48.     gxViewPort        aViewPort;
  49.     
  50.     /* Initialization */
  51.     
  52.     myPoint.x = ff(20);
  53.     myPoint.y = ff(80);
  54.     
  55.     aViewPort = GXNewWindowViewPort(sampleWindow);
  56.     SetDefaultViewPort(aViewPort);
  57.     
  58.     len = MyStrLen(myString);
  59.     
  60.     myStyle = NewLayoutStyle((char *) "\pHoefler Text Italic", ff(60), 0, nil, nil, 0, nil);
  61.     gxRunFeature[0].featureType = ligatureType;
  62.     gxRunFeature[0].featureSelector = ligatureRequiredOffSelector;
  63.     gxRunFeature[1].featureType = ligatureType;
  64.     gxRunFeature[1].featureSelector = ligatureCommonOffSelector;
  65.     gxRunFeature[2].featureType = ligatureType;
  66.     gxRunFeature[2].featureSelector = ligatureRareOffSelector;
  67.     gxRunFeature[3].featureType = ligatureType;
  68.     gxRunFeature[3].featureSelector = ligatureLogotypeOffSelector;
  69.     gxRunFeature[4].featureType = ligatureType;
  70.     gxRunFeature[4].featureSelector = ligatureRebusOffSelector;
  71.     GXSetStyleRunFeatures(myStyle, 5, gxRunFeature);
  72.     
  73.     layout = GXNewLayout(
  74.         1, &len, (void *) &myString,
  75.         1, &len, &myStyle,
  76.         1, &len, &level,
  77.         nil, &myPoint);
  78.     GXDrawShape(layout);
  79.     GXGetGlyphOffset(layout, 17, true, &offset, &leadingEdge, &wasRealCharacter);
  80.     highlight = GXGetLayoutHighlight(layout, offset, offset + 1, gxHighlightAverageAngle, nil);
  81.     /* changed to make this invert */
  82.     SetShapeFastXorTransfer(highlight, NULL, NULL);
  83.     GXDrawShape(highlight);
  84.     GXDisposeShape(layout);
  85.     GXDisposeShape(highlight);
  86.     
  87.     gxRunFeature[0].featureSelector = ligatureRequiredOnSelector;
  88.     gxRunFeature[1].featureSelector = ligatureCommonOnSelector;
  89.     GXSetStyleRunFeatures(myStyle, 5, gxRunFeature);
  90.     myPoint.y += ff(75);
  91.     
  92.     layout = GXNewLayout(
  93.         1, &len, (void *) &myString,
  94.         1, &len, &myStyle,
  95.         1, &len, &level,
  96.         nil, &myPoint);
  97.     GXDrawShape(layout);
  98.     GXGetGlyphOffset(layout, 17, true, &offset, &leadingEdge, &wasRealCharacter);
  99.     highlight = GXGetLayoutHighlight(layout, offset, offset + 1, gxHighlightAverageAngle, nil);
  100.     /* changed to make this invert */
  101.     SetShapeFastXorTransfer(highlight, NULL, NULL);
  102.     GXDrawShape(highlight);
  103.     GXDisposeShape(layout);
  104.     GXDisposeShape(highlight);
  105.     
  106.     gxRunFeature[2].featureSelector = ligatureRareOnSelector;
  107.     GXSetStyleRunFeatures(myStyle, 5, gxRunFeature);
  108.     myPoint.y += ff(75);
  109.     
  110.     layout = GXNewLayout(
  111.         1, &len, (void *) &myString,
  112.         1, &len, &myStyle,
  113.         1, &len, &level,
  114.         nil, &myPoint);
  115.     GXDrawShape(layout);
  116.     GXGetGlyphOffset(layout, 17, true, &offset, &leadingEdge, &wasRealCharacter);
  117.     highlight = GXGetLayoutHighlight(layout, offset, offset + 1, gxHighlightAverageAngle, nil);
  118.     /* changed to make this invert */
  119.     SetShapeFastXorTransfer(highlight, NULL, NULL);
  120.     GXDrawShape(highlight);
  121.     GXDisposeShape(layout);
  122.     GXDisposeShape(highlight);
  123.     
  124.     GXDisposeViewPort(aViewPort);
  125.     }    /* main */
  126.